home *** CD-ROM | disk | FTP | other *** search
- #include "mesg.h"
-
- /*
- * Send a message by writing on a file descriptor.
- * The mesg_len, mesg_type and mesg_data fields must be filled
- * in by the caller.
- */
-
- mesg_send(fd, mesgptr)
- int fd;
- Mesg *mesgptr;
- {
- int n;
-
- /*
- * Write the message header and the optional data.
- * First calculate the length of the length field, plus the
- * type field, plus the optional data.
- */
-
- n = MESGHDRSIZE + mesgptr->mesg_len;
-
- if (write(fd, (char *) mesgptr, n) != n)
- err_sys("message write error");
- }
-
- /*
- * Receive a message by reading on a file descriptor.
- * Fill in the mesg_len, mesg_type and mesg_data fields, and return
- * mesg_len as the return value also.
- */
-
- int
- mesg_recv(fd, mesgptr)
- int fd;
- Mesg *mesgptr;
- {
- int n;
-
- /*
- * Read the message header first. This tells us how much
- * data follows the message for the next read.
- * An end-of-file on the file descriptor causes us to
- * return 0. Hence, we force the assumption on the caller
- * that a 0-length message means EOF.
- */
-
- if ( (n = read(fd, (char *) mesgptr, MESGHDRSIZE)) == 0)
- return(0); /* end of file */
- else if (n != MESGHDRSIZE)
- err_sys("message header read error");
-
- /*
- * Read the actual data, if there is any.
- */
-
- if ( (n = mesgptr->mesg_len) > 0)
- if (read(fd, mesgptr->mesg_data, n) != n)
- err_sys("data read error");
- return(n);
- }
-